package com.mjfeed.service;

import com.mjfeed.dto.api.OrderJSON;
import com.mjfeed.dto.api.OrderListJSON;
import com.mjfeed.entity.Admin;
import com.mjfeed.entity.Cart;
import com.mjfeed.entity.Member;
import com.mjfeed.entity.Order;
import com.mjfeed.entity.OrderItem;
import com.mjfeed.entity.PaymentMethod;
import com.mjfeed.entity.Product;
import com.mjfeed.entity.Receiver;
import com.mjfeed.entity.Shipping;
import com.mjfeed.entity.ShippingMethod;
import com.mjfeed.util.Pagination;
import com.mjfeed.util.ParamBean;

/**
 * @description 订单
 * @author zhaominglei
 * @date 2014年10月4日
 */
public interface OrderService extends BaseService{
	/**
	 * 获取所有商品分页
	 */
	public Pagination<Order> getPagination(ParamBean paramBean);
	
	/**
	 * 获取所有商品分页
	 */
	public Pagination<Order> getPagination(ParamBean paramBean, Member member);
	
	/**
	 * 生成订单
	 * 
	 * @param cart
	 *            购物车
	 * @param receiver
	 *            收货地址
	 * @param paymentMethod
	 *            支付方式
	 * @param shippingMethod
	 *            配送方式
	 * @param couponCode
	 *            优惠码
	 * @param isInvoice
	 *            是否开据发票
	 * @param invoiceTitle
	 *            发票抬头
	 * @param useBalance
	 *            是否使用余额
	 * @param memo
	 *            附言
	 * @return 订单
	 */
	public Order build(Cart cart, Receiver receiver, PaymentMethod paymentMethod, ShippingMethod shippingMethod, boolean isInvoice, String invoiceTitle, String memo);

	/**
	 * 创建订单
	 * 
	 * @param cart
	 *            购物车
	 * @param receiver
	 *            收货地址
	 * @param paymentMethod
	 *            支付方式
	 * @param shippingMethod
	 *            配送方式
	 * @param isInvoice
	 *            是否开据发票
	 * @param invoiceTitle
	 *            发票抬头
	 * @param useBalance
	 *            是否使用余额
	 * @param memo
	 *            附言
	 * @param operator
	 *            操作员
	 * @return 订单
	 */
	public Order create(Cart cart, Receiver receiver, PaymentMethod paymentMethod, ShippingMethod shippingMethod, boolean isInvoice, String invoiceTitle, String memo, Admin operator);

	/**
	 * 订单发货
	 * 
	 * @param order
	 *            订单
	 * @param shipping
	 *            发货单
	 * @param operator
	 *            操作员
	 */
	public void shipping(Order order, Shipping shipping, Admin operator);
	
	/**
	 * 获取商品订单明细
	 * 
	 * @param order
	 *            订单
	 * @param product
	 *            商品
	 */
	public OrderItem getOrderItem(Order order, Product product);
	
	/**
	 * search结果转json
	 */
	public OrderListJSON searchToJSON(Pagination<Order> pagination);
	
	/**
	 * bean结果转json
	 */
	public OrderJSON beanToJSON(Order order);
	
	/**
	 * 获取未支付的订单数
	 */
	public long getNotPayCount(Member member);
	/**
	 * 获取未发货的订单数
	 */
	public long getNotShipCount(Member member);
	/**
	 * 获取未收货的订单数
	 */
	public long getNotReceiveCount(Member member);
}
